#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
开发环境配置

开发环境的特定配置，继承自基础配置并覆盖相应的值。
所有配置通过环境变量或默认值设置，无需额外的配置文件。

作者: AI Assistant
创建时间: 2024
"""

import os
from .base_config import BaseConfig


class DevelopmentConfig(BaseConfig):
    """开发环境配置
    
    环境变量说明：
    - DB_TYPE: 数据库类型 (默认: sqlite)
    - DB_HOST: 数据库主机 (默认: localhost)
    - DB_PORT: 数据库端口 (默认: 5432)
    - DB_NAME: 数据库名称 (默认: wechat_robot_dev)
    - DB_USER: 数据库用户名 (默认: postgres)
    - DB_PASSWORD: 数据库密码 (默认: 空)
    - FLASK_HOST: Flask主机 (默认: 127.0.0.1)
    - FLASK_PORT: Flask端口 (默认: 5000)
    - FLASK_DEBUG: 调试模式 (默认: true)
    - SECRET_KEY: Flask密钥 (默认: 开发密钥)
    - WECHAT_AUTO_REPLY: 自动回复 (默认: true)
    - WECHAT_WELCOME: 欢迎消息 (默认: true)
    - NEWS_ENABLED: 新闻推送 (默认: false)
    - LOG_LEVEL: 日志级别 (默认: DEBUG)
    """
    
    def __init__(self):
        super().__init__()
        
        # 数据库配置 - 开发环境使用PostgreSQL
        self.database.type = os.getenv('DB_TYPE', 'postgresql')
        self.database.host = os.getenv('DB_HOST', '192.168.0.141')
        self.database.port = int(os.getenv('DB_PORT', 15432))
        self.database.database = os.getenv('DB_NAME', 'aisales')
        self.database.username = os.getenv('DB_USER', 'chatwiki')
        self.database.password = os.getenv('DB_PASSWORD', 'postgres_password')
        self.database.sslmode = os.getenv('DB_SSLMODE', 'disable')
        self.database.path = os.getenv('DB_PATH', os.path.join(os.getcwd(), 'data', 'wechat_robot_dev.db'))
        
        # Flask配置 - 开发环境
        self.flask.host = os.getenv('FLASK_HOST', '127.0.0.1')
        self.flask.port = int(os.getenv('FLASK_PORT', 5000))
        self.flask.debug = os.getenv('FLASK_DEBUG', 'true').lower() == 'true'
        self.flask.testing = False
        self.flask.environment = 'development'
        self.flask.secret_key = os.getenv('SECRET_KEY', 'dev-secret-key-do-not-use-in-production')
        
        # 日志配置 - 开发环境详细日志
        self.logger.level = os.getenv('LOG_LEVEL', 'DEBUG')
        self.logger.file_path = os.getenv('LOG_FILE', 'logs/dev_wechat_robot.log')
        self.logger.console_output = os.getenv('LOG_CONSOLE', 'true').lower() == 'true'
        self.logger.file_output = os.getenv('LOG_FILE_OUTPUT', 'true').lower() == 'true'
        self.logger.format = '%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s'
        
        # 微信配置 - 开发环境
        self.wechat.auto_reply_enabled = os.getenv('WECHAT_AUTO_REPLY', 'true').lower() == 'true'
        self.wechat.default_reply_message = os.getenv('WECHAT_REPLY_MESSAGE', '[开发环境] 收到！')
        self.wechat.welcome_enabled = os.getenv('WECHAT_WELCOME', 'true').lower() == 'true'
        self.wechat.welcome_template = os.getenv('WECHAT_WELCOME_TEMPLATE', '[开发环境] 欢迎 @{member_name} 加入群聊！🎉')
        
        # 新闻配置 - 开发环境关闭
        self.news.enabled = os.getenv('NEWS_ENABLED', 'false').lower() == 'true'
        self.news.push_time = os.getenv('NEWS_PUSH_TIME', '09:00')
        self.news.api_key = os.getenv('NEWS_API_KEY')
        
        # 安全配置 - 开发环境宽松
        cors_origins = os.getenv('CORS_ORIGINS', 'http://localhost:3000,http://127.0.0.1:3000,http://localhost:8080,http://127.0.0.1:8080,http://192.168.142.1:3000')
        self.security.cors_origins = [origin.strip() for origin in cors_origins.split(',')]
        self.security.max_upload_size = int(os.getenv('MAX_UPLOAD_SIZE', 100))  # 100MB
        self.security.api_access_token = os.getenv('API_ACCESS_TOKEN')
        
        # 路径配置
        self.paths.backup_dir = os.getenv('BACKUP_DIR', 'data/backups/dev')
        self.paths.temp_dir = os.getenv('TEMP_DIR', 'data/temp/dev')
        self.paths.log_dir = os.getenv('LOG_DIR', 'logs/dev')
        
        # 确保开发环境目录存在
        self._ensure_dev_directories()
    
    def _ensure_dev_directories(self):
        """确保开发环境目录存在"""
        import os
        from pathlib import Path
        
        directories = [
            'data',
            'data/backups',
            'data/backups/dev',
            'data/temp',
            'data/temp/dev',
            'logs',
            'logs/dev'
        ]
        
        for directory in directories:
            Path(directory).mkdir(parents=True, exist_ok=True)
    
    def get_flask_config(self):
        """获取Flask配置字典 - 开发环境特定"""
        config = super().get_flask_config()
        
        # 开发环境特定配置
        config.update({
            'DEBUG': True,
            'TESTING': False,
            'EXPLAIN_TEMPLATE_LOADING': True,  # 模板加载调试
            'SQLALCHEMY_ECHO': True,  # SQL查询日志
            'SQLALCHEMY_RECORD_QUERIES': True,  # 记录查询
            'WTF_CSRF_ENABLED': False,  # 开发环境关闭CSRF
        })
        
        return config
    
    def to_dict(self):
        """转换为字典格式 - 包含开发环境标识"""
        config_dict = super().to_dict()
        config_dict['environment'] = 'development'
        config_dict['description'] = '开发环境配置'
        return config_dict